package br.org.mestrado.vais.comparator;

import br.org.mestrado.vais.Anticorpo;
import br.org.mestrado.vais.util.LEGENDA;

public class ParetoMax extends ParetoCompare {

	public ParetoMax(final int totalObjectives) {
		super(totalObjectives);
	}

	@Override
	public int compare(Anticorpo arg0, Anticorpo arg1) {
		int arg0melhor = 0, arg1melhor = 0, igual = 0;

		// Verifica se arg0 domina arg1
		// arg0 domina arg1 se e somente se
		// arg0 não for pior que arg1 em todos os
		// objetivos e for melhor em pelo menos 1 objetivo
		for (int pointer = 0; pointer < numObjetivos; pointer++) {

			// conta em quantos objetivos que arg0 é melhor que arg1
			if (arg0.getObjectives()[pointer] < arg1.getObjectives()[pointer]) {
				arg1melhor++;
			} else if (arg0.getObjectives()[pointer] > arg1.getObjectives()[pointer]) {
				arg0melhor++;
			} else {
				igual++;
			}
		}

		// verifica se arg1 domina arg0
		if (igual >= 0 && (arg1melhor > arg0melhor)) {
			return LEGENDA.DOMINADO.valor();
		}
		// verifica se arg0 domina arg1
		if (igual >= 0 && (arg0melhor > arg1melhor)) {
			return LEGENDA.DOMINA.valor();
		}
		// senão são soluções não dominadas
		return LEGENDA.NAO_DOMINA.valor();
	}

}
